#!/usr/bin/env python3
###
# @Author: Logan.Li
# @Gitee: https://gitee.com/attacker
# @email: admin@attacker.club
# @Date: 2025-03-14 11:05:30
# @LastEditTime: 2025-03-14 11:05:35
# @Description: 核心监控指标定义
###

from typing import Dict, List

class CoreMetrics:
    """核心监控指标定义"""
    
    @staticmethod
    def get_compute_metrics() -> List[Dict]:
        """获取计算资源核心监控指标"""
        return [
            {
                'name': 'cpu_usage',
                'description': 'CPU使用率',
                'unit': 'percent',
                'threshold': 80,
                'priority': 'critical',
                'period': 300,  # 5分钟
                'evaluation_periods': 3,  # 连续3次超过阈值才告警
            },
            {
                'name': 'memory_usage',
                'description': '内存使用率',
                'unit': 'percent',
                'threshold': 85,
                'priority': 'critical',
                'period': 300,
                'evaluation_periods': 3,
            },
            {
                'name': 'disk_usage',
                'description': '磁盘使用率',
                'unit': 'percent',
                'threshold': 90,
                'priority': 'critical',
                'period': 300,
                'evaluation_periods': 3,
            },
            {
                'name': 'disk_iops',
                'description': '磁盘IOPS',
                'unit': 'count/s',
                'threshold': 1000,
                'priority': 'warning',
                'period': 300,
                'evaluation_periods': 3,
            }
        ]
        
    @staticmethod
    def get_database_metrics() -> List[Dict]:
        """获取数据库核心监控指标"""
        return [
            {
                'name': 'connection_usage',
                'description': '连接数使用率',
                'unit': 'percent',
                'threshold': 80,
                'priority': 'critical',
                'period': 300,
                'evaluation_periods': 3,
            },
            {
                'name': 'cpu_usage',
                'description': 'CPU使用率',
                'unit': 'percent',
                'threshold': 80,
                'priority': 'critical',
                'period': 300,
                'evaluation_periods': 3,
            },
            {
                'name': 'memory_usage',
                'description': '内存使用率',
                'unit': 'percent',
                'threshold': 85,
                'priority': 'critical',
                'period': 300,
                'evaluation_periods': 3,
            },
            {
                'name': 'disk_usage',
                'description': '磁盘使用率',
                'unit': 'percent',
                'threshold': 90,
                'priority': 'critical',
                'period': 300,
                'evaluation_periods': 3,
            },
            {
                'name': 'slow_queries',
                'description': '慢查询数',
                'unit': 'count/min',
                'threshold': 10,
                'priority': 'warning',
                'period': 300,
                'evaluation_periods': 2,
            }
        ]
        
    @staticmethod
    def get_network_metrics() -> List[Dict]:
        """获取网络核心监控指标"""
        return [
            {
                'name': 'bandwidth_usage',
                'description': '带宽使用率',
                'unit': 'percent',
                'threshold': 85,
                'priority': 'warning',
                'period': 300,
                'evaluation_periods': 3,
            },
            {
                'name': 'packet_loss',
                'description': '丢包率',
                'unit': 'percent',
                'threshold': 1,
                'priority': 'critical',
                'period': 300,
                'evaluation_periods': 2,
            },
            {
                'name': 'connection_count',
                'description': '连接数',
                'unit': 'count',
                'threshold': 10000,
                'priority': 'warning',
                'period': 300,
                'evaluation_periods': 3,
            }
        ]
        
    @staticmethod
    def get_load_balancer_metrics() -> List[Dict]:
        """获取负载均衡器核心监控指标"""
        return [
            {
                'name': 'healthy_hosts',
                'description': '健康主机数',
                'unit': 'count',
                'threshold': 2,  # 最少2台健康主机
                'priority': 'critical',
                'period': 300,
                'evaluation_periods': 1,  # 立即告警
            },
            {
                'name': 'response_time',
                'description': '响应时间',
                'unit': 'ms',
                'threshold': 2000,  # 2秒
                'priority': 'warning',
                'period': 300,
                'evaluation_periods': 3,
            },
            {
                'name': '5xx_errors',
                'description': '5xx错误率',
                'unit': 'percent',
                'threshold': 5,
                'priority': 'critical',
                'period': 300,
                'evaluation_periods': 2,
            },
            {
                'name': '4xx_errors',
                'description': '4xx错误率',
                'unit': 'percent',
                'threshold': 10,
                'priority': 'warning',
                'period': 300,
                'evaluation_periods': 3,
            }
        ]
        
    @staticmethod
    def get_container_metrics() -> List[Dict]:
        """获取容器核心监控指标"""
        return [
            {
                'name': 'pod_restart_count',
                'description': 'Pod重启次数',
                'unit': 'count',
                'threshold': 3,  # 5分钟内重启3次
                'priority': 'critical',
                'period': 300,
                'evaluation_periods': 1,
            },
            {
                'name': 'node_ready',
                'description': '节点就绪状态',
                'unit': 'status',
                'threshold': 1,  # 1=不就绪
                'priority': 'critical',
                'period': 300,
                'evaluation_periods': 1,
            },
            {
                'name': 'pod_pending',
                'description': '等待中的Pod数',
                'unit': 'count',
                'threshold': 5,
                'priority': 'warning',
                'period': 300,
                'evaluation_periods': 2,
            }
        ]
